class PIDController(object):
    def __init__(self, Kp, Kd, Ki, integral_max, setpoint=0):

        self.Kp=Kp 
        self.Ki=Ki
        self.Kd=Kd 

        self.integral_max = integral_max
        self.integral_min = integral_max * (-1)
        self.setpoint = setpoint
        self.previous_error = 0
        self.integral = 0 
        
        


    def update(self, current_value, dt):
        """
        更新PID控制器的输出。

        根据当前值和设定点计算误差，并使用PID控制律更新控制器的输出。
        
        参数:
        current_value -- 当前过程变量的值
        dt -- 时间间隔，用于计算积分和微分项
        
        返回:
        控制器的输出，根据当前误差、积分误差和微分误差计算得出。
        """
        # 计算当前误差
        error = self.setpoint - current_value
        
        # 更新比例项
        proportional = self.Kp * error

        # 更新积分项
        self.integral += error * dt
        
        # 限制积分项的大小
        if self.integral > self.integral_max:
            self.integral = self.integral_max
        elif self.integral < self.integral_min:
            self.integral = self.integral_min
        
        # 计算微分项
        derivative = (error - self.previous_error) / dt
        
        # 计算PID控制律的输出
        output = proportional + self.Ki * self.integral + self.Kd * derivative
        
        # 保存当前误差，供下一次计算微分项使用
        self.previous_error = error
        
        # 返回控制器的输出
        return output